package com.duobaoyu.dby.supply.common.biz.vo.order;

import com.duobaoyu.dby.saas.product.common.base.serializer.BigDecimalSerializer;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 子订单详情
 *
 * @author fengshaoyu
 * @version 1.0.0
 * @date 2022/6/8 17:46
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class OrderSubDetailVO implements Serializable {
	private static final long serialVersionUID = -8662783023413096382L;
	/**
	 * 订单信息
	 */
	private OrderInfo orderInfo;
	/**
	 * 收货人信息
	 */
	private Consignee consignee;
	/**
	 * 商品信息
	 */
	@ApiModelProperty("商品信息")
	private List<ProductInfo> productInfoList;

	@Data
	public static class OrderInfo{
		/**
		 * 供应链交易单号
		 */
		private String supplyTradeSn;
		/**
		 * 业务订单交易号
		 */
		private String bizTradeSn;
		/**
		 * 供应链订单号
		 */
		private String orderSn;
		/**
		 * 供应链订单号父单号
		 */
		private String orderParentSn;
		/**
		 * 渠道子单号
		 */
		private String channelOrderSn;
		/**
		 * 渠道父单号
		 */
		private String channelOrderParentSn;
		/**
		 * 渠道交易单号
		 */
		private String channelTradeOrderSn;
		/**
		 * 渠道编码
		 */
		private String channelCode;
		/**
		 * 渠道描述
		 */
		private String channelDesc;
		/**
		 * 订单类型,real:实物订单、call:话费快充订单、flow:流量订单、coupon:卡密订单、recharge:直充订单、
		 * call_slow:话费慢充订单、electricity_fees:电费订单、electricity_fees_slow:电费慢充订单
		 * //@see com.duobaoyu.dby.channel.adapter.enums.biz.order.OrderTypeEnum
		 */
		private String orderType;
		/**
		 * 业务来源
		 */
		private String showServerName;
		/**
		 * 商户ID
		 */
		private String mchId;
		/**
		 * 用户ID
		 */
		private String userId;
		/**
		 * 订单状态
		 */
		private Integer orderStatus;
		/**
		 * 订单状态描述
		 */
		private String orderStatusDesc;
		/**
		 * 原因内容
		 */
		private String reason;
		/**
		 * 创建时间
		 */
		@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
		private LocalDateTime createTime;
		/**
		 * 更新时间
		 */
		@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
		private LocalDateTime updateTime;
		/**
		 * 取消订单标识,0:不可取消、1:可取消
		 */
		private Integer cancelOrderFlag;
	}

	@Data
	public static class Consignee{
		/**
		 * 收货人姓名
		 */
		private String consigneeName;
		/**
		 * 收货人电话
		 */
		private String consigneePhone;
		/**
		 * 收货人身份证号
		 */
		private String consigneeIdCardNum;
		/**
		 * 收货地址省名称
		 */
		private String consigneeProvinceName;
		/**
		 * 收货地址城市名称
		 */
		private String consigneeCityName;
		/**
		 * 收货地址区县名称
		 */
		private String consigneeCountyName;
		/**
		 * 收货地址乡镇名称
		 */
		private String consigneeTownName;
		/**
		 * 详细地址
		 */
		private String consigneeAddress;
	}

	@Data
	public static class ProductInfo{
		/**
		 * 供应链订单号
		 */
		private String orderSn;
		/**
		 * SKU编码
		 */
		private String skuCode;
		/**
		 * SKU名称
		 */
		private String skuName;
		/**
		 * SKU图片
		 */
		private String skuPic;
		/**
		 * 商品数量
		 */
		private Integer skuNum;
		/**
		 * 商品销售属性
		 */
		private List<SaleAttributeVO> saleAttributes;
		/**
		 * 平台成本价格
		 */
		@JsonSerialize(using = BigDecimalSerializer.class)
		private BigDecimal platformPrice;
		/**
		 * 平台成本价总额
		 */
		@JsonSerialize(using = BigDecimalSerializer.class)
		private BigDecimal totalPlatformPrice;
		/**
		 * 平台销售价格
		 */
		@JsonSerialize(using = BigDecimalSerializer.class)
		private BigDecimal platformSellPrice;
		/**
		 * 平台销售价总额
		 */
		@JsonSerialize(using = BigDecimalSerializer.class)
		private BigDecimal totalPlatformSellPrice;
		/**
		 * 商品类型
		 * //@see com.duobaoyu.dby.channel.adapter.enums.biz.product.ProductTypeEnum
		 */
		private String productType;
		/**
		 * 手机号/充值账号
		 */
		private String rechargeAccount;
		/**
		 * 渠道已退款总额
		 */
		@JsonSerialize(using = BigDecimalSerializer.class)
		private BigDecimal totalChannelRefundAmount;
		/**
		 * 是否存在售后申请
		 */
		private Boolean existsAfterSaleApply;
		/**
		 * 手机运营商
		 */
		private String phoneOperator;
		/**
		 * 手机归属地
		 */
		private String 	phoneAddress;
	}
}
